package com.xu.seckillkill.exception;

import com.xu.seckillkill.pojo.ReposBean;
import com.xu.seckillkill.pojo.Status;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;


/**
 * @version v1.0
 * @类描述： 全局异常处理 通过 @RestControllerAdvice 和 @ExceptionHandler 拦截之定义注解当出现指定注解的时候进行处理
 * @项目名称：
 * @包名： com.xu.seckillkill.exception
 * @类名称：GlobalExceptionHandler
 * @创建人：YIHANG.XU
 * @创建时间：2021/1/1210:10 下午
 * @修改人：YIHANG.XU
 * @修改时间：2021/1/1210:10 下午
 * @修改备注：
 * @Copyright
 */
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
    /**
     * 多条件拦截
     *
     * @param ex
     * @return
     */
    @ExceptionHandler(Exception.class)
    public ReposBean ExceptionHandle(Exception ex) {
        if (ex instanceof BindException) {
            BindException bindException = (BindException) ex;
            String defaultMessage = bindException.getAllErrors().get(0).getDefaultMessage();
            ReposBean error = ReposBean.error(Status.ERROR);
            error.setMessage(defaultMessage);
            return error;
        }
        log.info(ex.getMessage(), ex);

        return ReposBean.error(Status.ERROR);

    }

    @ExceptionHandler(MyProjectError.class)
    public ReposBean ExceptionHandle2(MyProjectError ex) {
        if (ex instanceof MyProjectError) {
            MyProjectError myProjectError = (MyProjectError) ex;
            Status status = myProjectError.getStatus();
            return ReposBean.error(status);
        }
        log.info(ex.getMessage(), ex);

        return ReposBean.error(Status.ERROR);

    }

}
